#include <stdio.h>
#include <string.h>
#include "Parser.h"
#include <iostream>
#include "AsistenteObtencionDeTerminos.h"
#include "TerminosEnMemoria.h"
Parser::Parser() {
	this -> cantidadDeDocumentos = 0;
	this -> cantidadDePunteros = 0;
	this -> cantidadDeTerminos = 0;
	this -> almacenaOcurrencias = true;

}

Parser::~Parser() {

}

/*
 * Pre: El primer parámetro indica el directorio dónde se encuentra el archivo con
 * las rutas de los documentos. El parámetro restante indica el directorio donde se
 * quiere guardar el resultado de la ejecución del parser.
 * Post:
 */
bool Parser::ejecutarParser(const string & directorioArchivoRutasDocumentos ,
					const string & directorioDestino) {
	bool retorno = false;
	//recuperación de documentos
	recuperarTerminos(directorioArchivoRutasDocumentos , directorioDestino);
	retorno = cantidadDeDocumentos > 0;
	//ordenamiento de terminos
	this->ordenarTerminos(directorioDestino);

	//merge

	//eliminación de repetidos y
	return retorno;
}

/*
 * Pre: La instancia ha sido creada.
 * Pos: Se han recuperando los términos generando un archivo con los mismos.
 *
 */
void Parser::recuperarTerminos(const string & directorioArchivoRutasDocumentos ,
					const string & directorioDestino){
	AsistenteObtencionDeTerminos asistente;
	this -> cantidadDeDocumentos = asistente.recuperarTerminos(
							directorioArchivoRutasDocumentos,directorioDestino);
}

/*
 * Pre: La instancia ha sido creada.
 * Post: Se retorna la cantidad de documentos recuperados.
 */
unsigned int Parser::getCantidadDeDocumentos() {
	return this -> cantidadDeDocumentos;
}

/*
 * Pre: La instancia ha sido creada y se han recuperado los terminos del
 * directorio.
 * Post: Se han generado las particiones con los terminos ordenados.
*/
void Parser::ordenarTerminos(const string & directorio){
	TerminosEnMemoria terminosEnMemoria(directorio);
	while(terminosEnMemoria.cargarNuevosTerminos()){
		//terminosEnMemoria.quickSort();
		for(int i = 0; i<30;i++)
			cout<<terminosEnMemoria.getBufferTerminos()[
			      terminosEnMemoria.getDatosTerminos()[i].offset]<<" ";
	}

}
